﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Project.Core;
using Microsoft.Xna.Framework.Graphics;

namespace TLS
{
    public class Boss2 : Enemigo
    {
        private Game1 game;
        private float fuerzaGravedad = 0.002f;

        public Animacion ACaminandoDerecha;
        public Animacion ACaminandoIzquierda;
        public Animacion AAtacandoIzquierda;
        public Animacion AAtacandoDerecha;

        public enum Estados
        {
            CAMINANDO, ATACANDO
        }
        public Estados Estado { get; set; }
        public enum Direcciones
        {
            IZQUIERDA, DERECHA
        }
        public Direcciones Direccion { get; set; }

        public double vida { get; set; }
        public float velocidad { get; set; }
        public float ataqueBoss2 { get; set; }

        public Boss2(Game1 game)
            : base(null)
        {
            this.game = game;
            #region "Sprites izquierda"
            Texture2D BossB_101i = game.Content.Load<Texture2D>("Boss2/caminandoI/caminando_l1");
            Texture2D BossB_102i = game.Content.Load<Texture2D>("Boss2/caminandoI/caminando_l2");
            Texture2D BossB_103i = game.Content.Load<Texture2D>("Boss2/caminandoI/caminando_l3");
            Texture2D BossB_104i = game.Content.Load<Texture2D>("Boss2/caminandoI/caminando_l4");
            Texture2D BossB_105i = game.Content.Load<Texture2D>("Boss2/caminandoI/caminando_l5");
            Texture2D BossB_106i = game.Content.Load<Texture2D>("Boss2/caminandoI/caminando_l6");
            Texture2D BossB_107i = game.Content.Load<Texture2D>("Boss2/caminandoI/caminando_l7");
            Texture2D BossB_108i = game.Content.Load<Texture2D>("Boss2/caminandoI/caminando_l8");
            Texture2D BossB_109i = game.Content.Load<Texture2D>("Boss2/caminandoI/caminando_l9");
            Texture2D BossB_110i = game.Content.Load<Texture2D>("Boss2/caminandoI/caminando_l10");
            Texture2D BossB_111i = game.Content.Load<Texture2D>("Boss2/caminandoI/caminando_l11");
            Texture2D BossB_112i = game.Content.Load<Texture2D>("Boss2/caminandoI/caminando_l12");
            Texture2D BossB_113i = game.Content.Load<Texture2D>("Boss2/caminandoI/caminando_l13");
            Texture2D BossB_114i = game.Content.Load<Texture2D>("Boss2/caminandoI/caminando_l14");
            Texture2D BossB_115i = game.Content.Load<Texture2D>("Boss2/caminandoI/caminando_l15");
            Texture2D BossB_116i = game.Content.Load<Texture2D>("Boss2/caminandoI/caminando_l16");
            Texture2D BossB_117i = game.Content.Load<Texture2D>("Boss2/caminandoI/caminando_l17");
            Texture2D BossB_118i = game.Content.Load<Texture2D>("Boss2/caminandoI/caminando_l18");
            Texture2D BossB_119i = game.Content.Load<Texture2D>("Boss2/caminandoI/caminando_l19");
            Texture2D BossB_120i = game.Content.Load<Texture2D>("Boss2/caminandoI/caminando_l20");

            ACaminandoIzquierda = new Animacion();
            ACaminandoIzquierda.agregarFrame(BossB_101i, 150);
            ACaminandoIzquierda.agregarFrame(BossB_102i, 150);
            ACaminandoIzquierda.agregarFrame(BossB_103i, 150);
            ACaminandoIzquierda.agregarFrame(BossB_104i, 150);
            ACaminandoIzquierda.agregarFrame(BossB_105i, 150);
            ACaminandoIzquierda.agregarFrame(BossB_106i, 150);
            ACaminandoIzquierda.agregarFrame(BossB_107i, 150);
            ACaminandoIzquierda.agregarFrame(BossB_108i, 150);
            ACaminandoIzquierda.agregarFrame(BossB_109i, 150);
            ACaminandoIzquierda.agregarFrame(BossB_110i, 150);
            ACaminandoIzquierda.agregarFrame(BossB_111i, 150);
            ACaminandoIzquierda.agregarFrame(BossB_112i, 150);
            ACaminandoIzquierda.agregarFrame(BossB_113i, 150);
            ACaminandoIzquierda.agregarFrame(BossB_114i, 150);
            ACaminandoIzquierda.agregarFrame(BossB_115i, 150);
            ACaminandoIzquierda.agregarFrame(BossB_116i, 150);
            ACaminandoIzquierda.agregarFrame(BossB_117i, 150);
            ACaminandoIzquierda.agregarFrame(BossB_118i, 150);
            ACaminandoIzquierda.agregarFrame(BossB_119i, 150);
            ACaminandoIzquierda.agregarFrame(BossB_120i, 150);
            #endregion

            #region "Sprites derecha"
            Texture2D BossB_101d = game.Content.Load<Texture2D>("Boss2/caminandoD/caminando_d1");
            Texture2D BossB_102d = game.Content.Load<Texture2D>("Boss2/caminandoD/caminando_d2");
            Texture2D BossB_103d = game.Content.Load<Texture2D>("Boss2/caminandoD/caminando_d3");
            Texture2D BossB_104d = game.Content.Load<Texture2D>("Boss2/caminandoD/caminando_d4");
            Texture2D BossB_105d = game.Content.Load<Texture2D>("Boss2/caminandoD/caminando_d5");
            Texture2D BossB_106d = game.Content.Load<Texture2D>("Boss2/caminandoD/caminando_d6");
            Texture2D BossB_107d = game.Content.Load<Texture2D>("Boss2/caminandoD/caminando_d7");
            Texture2D BossB_108d = game.Content.Load<Texture2D>("Boss2/caminandoD/caminando_d8");
            Texture2D BossB_109d = game.Content.Load<Texture2D>("Boss2/caminandoD/caminando_d9");
            Texture2D BossB_110d = game.Content.Load<Texture2D>("Boss2/caminandoD/caminando_d10");
            Texture2D BossB_111d = game.Content.Load<Texture2D>("Boss2/caminandoD/caminando_d11");
            Texture2D BossB_112d = game.Content.Load<Texture2D>("Boss2/caminandoD/caminando_d12");
            Texture2D BossB_113d = game.Content.Load<Texture2D>("Boss2/caminandoD/caminando_d13");
            Texture2D BossB_114d = game.Content.Load<Texture2D>("Boss2/caminandoD/caminando_d14");
            Texture2D BossB_115d = game.Content.Load<Texture2D>("Boss2/caminandoD/caminando_d15");
            Texture2D BossB_116d = game.Content.Load<Texture2D>("Boss2/caminandoD/caminando_d16");
            Texture2D BossB_117d = game.Content.Load<Texture2D>("Boss2/caminandoD/caminando_d17");
            Texture2D BossB_118d = game.Content.Load<Texture2D>("Boss2/caminandoD/caminando_d18");
            Texture2D BossB_119d = game.Content.Load<Texture2D>("Boss2/caminandoD/caminando_d19");
            Texture2D BossB_120d = game.Content.Load<Texture2D>("Boss2/caminandoD/caminando_d20");

            ACaminandoDerecha = new Animacion();
            ACaminandoDerecha.agregarFrame(BossB_101d, 150);
            ACaminandoDerecha.agregarFrame(BossB_102d, 150);
            ACaminandoDerecha.agregarFrame(BossB_103d, 150);
            ACaminandoDerecha.agregarFrame(BossB_104d, 150);
            ACaminandoDerecha.agregarFrame(BossB_105d, 150);
            ACaminandoDerecha.agregarFrame(BossB_106d, 150);
            ACaminandoDerecha.agregarFrame(BossB_107d, 150);
            ACaminandoDerecha.agregarFrame(BossB_108d, 150);
            ACaminandoDerecha.agregarFrame(BossB_109d, 150);
            ACaminandoDerecha.agregarFrame(BossB_110d, 150);
            ACaminandoDerecha.agregarFrame(BossB_111d, 150);
            ACaminandoDerecha.agregarFrame(BossB_112d, 150);
            ACaminandoDerecha.agregarFrame(BossB_113d, 150);
            ACaminandoDerecha.agregarFrame(BossB_114d, 150);
            ACaminandoDerecha.agregarFrame(BossB_115d, 150);
            ACaminandoDerecha.agregarFrame(BossB_116d, 150);
            ACaminandoDerecha.agregarFrame(BossB_117d, 150);
            ACaminandoDerecha.agregarFrame(BossB_118d, 150);
            ACaminandoDerecha.agregarFrame(BossB_119d, 150);
            ACaminandoDerecha.agregarFrame(BossB_120d, 150);
            #endregion

            #region "Sprites atacando derecha"
            Texture2D BossB_101dd = game.Content.Load<Texture2D>("Boss2/atacandoD/atacando_d1");
            Texture2D BossB_102dd = game.Content.Load<Texture2D>("Boss2/atacandoD/atacando_d2");
            Texture2D BossB_103dd = game.Content.Load<Texture2D>("Boss2/atacandoD/atacando_d3");
            Texture2D BossB_104dd = game.Content.Load<Texture2D>("Boss2/atacandoD/atacando_d4");
            Texture2D BossB_105dd = game.Content.Load<Texture2D>("Boss2/atacandoD/atacando_d5");
            Texture2D BossB_106dd = game.Content.Load<Texture2D>("Boss2/atacandoD/atacando_d6");

            AAtacandoDerecha = new Animacion();

            AAtacandoDerecha.agregarFrame(BossB_101dd, 200);
            AAtacandoDerecha.agregarFrame(BossB_102dd, 200);
            AAtacandoDerecha.agregarFrame(BossB_103dd, 200);
            AAtacandoDerecha.agregarFrame(BossB_104dd, 200);
            AAtacandoDerecha.agregarFrame(BossB_105dd, 200);
            AAtacandoDerecha.agregarFrame(BossB_106dd, 200);

            #endregion

            #region "Sprites atacando izquierda"
            Texture2D BossB_101ii = game.Content.Load<Texture2D>("Boss2/atacandoI/atacando_l1");
            Texture2D BossB_102ii = game.Content.Load<Texture2D>("Boss2/atacandoI/atacando_l2");
            Texture2D BossB_103ii = game.Content.Load<Texture2D>("Boss2/atacandoI/atacando_l3");
            Texture2D BossB_104ii = game.Content.Load<Texture2D>("Boss2/atacandoI/atacando_l4");
            Texture2D BossB_105ii = game.Content.Load<Texture2D>("Boss2/atacandoI/atacando_l5");
            Texture2D BossB_106ii = game.Content.Load<Texture2D>("Boss2/atacandoI/atacando_l6");

            AAtacandoIzquierda = new Animacion();
            AAtacandoIzquierda.agregarFrame(BossB_101ii, 200);
            AAtacandoIzquierda.agregarFrame(BossB_102ii, 200);
            AAtacandoIzquierda.agregarFrame(BossB_103ii, 200);
            AAtacandoIzquierda.agregarFrame(BossB_104ii, 200);
            AAtacandoIzquierda.agregarFrame(BossB_105ii, 200);
            AAtacandoIzquierda.agregarFrame(BossB_106ii, 200);

            #endregion

            base.animacion = ACaminandoIzquierda;
            this.Direccion = Direcciones.IZQUIERDA;
            this.Estado = Estados.CAMINANDO;

            velocidad = 0.02f;
            ataqueBoss2 = 0.6f;
            velocidadX = -0.09f;
            vida = 30;
        }

        public override void actualizar(long tiempo)
        {
            float derecha = this.game.objKaled.x + this.animacion.obtenerImagen().Width;
            float izquierda = this.game.objKaled.x;
            /*if (this.x < izquierda || this.x > derecha)
            {
                this.Estado = Estados.CAMINANDO;
            }*/
            if (this.x >= izquierda && this.x <= derecha) 
            {
                //this.velocidadX = 0.0f;
                this.Estado = Estados.ATACANDO;
            }
            else
            {
                this.Estado = Estados.CAMINANDO;
                //this.velocidadX = -0.09f;
            }
            switch (Direccion)
            {
                case Direcciones.IZQUIERDA:
                    switch (Estado)
                    {
                        case Estados.CAMINANDO:
                            base.animacion = ACaminandoIzquierda;
                            break;
                        case Estados.ATACANDO:
                            base.animacion = AAtacandoIzquierda;
                            break;
                    }
                    break;
                case Direcciones.DERECHA:
                    switch (Estado)
                    {
                        case Estados.CAMINANDO:
                            base.animacion = ACaminandoDerecha;
                            break;
                        case Estados.ATACANDO:
                            base.animacion = AAtacandoDerecha;
                            break;
                    }
                    break;
            }

            base.actualizar(tiempo);
            //Gravedad
            velocidadY += fuerzaGravedad * tiempo;

        }

        public override void evento_ColisionHorizontalSprite(Sprite objSprite)
        {
            if (objSprite is Kaled)
            {
                if (this.game.objKaled.x <= this.x)
                {
                    if (this.Direccion != Direcciones.IZQUIERDA)
                    {
                        this.Direccion = Direcciones.IZQUIERDA;
                        this.Estado = Estados.ATACANDO;
                        this.velocidadX = -this.velocidadX;
                    }
                }
                else
                {
                    if (this.Direccion != Direcciones.DERECHA)
                    {
                        this.Direccion = Direcciones.DERECHA;
                        this.Estado = Estados.ATACANDO;
                        this.velocidadX = -this.velocidadX;
                    }
                    else
                    {
                        this.Estado = Estados.ATACANDO;
                    }
                }
            }
            else if (objSprite is Disparo)
            {
                if (this.ataqueBoss2 < 1.0f)
                {
                    this.ataqueBoss2 += 0.015f;
                }

                if (this.game.objKaled.x <= this.x)
                {
                    if (this.Direccion != Direcciones.IZQUIERDA)
                    {
                        this.Direccion = Direcciones.IZQUIERDA;
                        this.velocidadX = -this.velocidadX;
                    }
                }
                else
                {
                    if (this.Direccion != Direcciones.DERECHA)
                    {
                        this.Direccion = Direcciones.DERECHA;
                        this.velocidadX = -this.velocidadX;
                    }
                }

            }
            //base.evento_ColisionHorizontalSprite(objSprite);
        }

        public override void evento_ColisionHorizontalTile()
        {
            if (Direccion == Direcciones.DERECHA) Direccion = Direcciones.IZQUIERDA;
            else Direccion = Direcciones.DERECHA;
            velocidadX = -velocidadX;
            //base.evento_ColisionHorizontalTile();
        }


    }
}
